Versione | Data | Descrizione | Autori |
---|---|---|---|
0.1 | 19/11/2019 | Prima stesura | Michelantonio Panichella, Gianluca Pirone |
0.2 | 26/11/2019 | Mappatura HW/SW, gestione accessi | Gianluca Pirone |
0.3 | 28/11/2019 | Descrizione del problema, revisione sottosistemi, condizioni limite e servizi sottosistemi | Michelantonio Panichella |
0.4 | 29/11/2019 | Definizioni, acronimi, abbreviazioni, riferimenti, panoramica e gestione dati persistenti | Michelantonio Panichella, Gianluca Pirone |
0.5 | 18/12/2019 | Revisione sottosistemi, revisione diagrammi e revisione tavola degli accessi | Team |
0.6 | 7/1/2020 | Miglioramento sottosistemi, miglioramento tavola degli accessi | Gianluca Pirone |
0.7 | 9/1/2020 | Revisione sottosistemi, integrazione nuovi diagrammi e miglioramento tavola degli accessi | Team |
0.8 | 12/1/2020 | Ridivisione sottosistemi | Team |
La web application proposta è stata progettata per permettere a chiunque fosse interessato e appassionato al cinema, di gestire i propri film preferiti (e non solo) nella maniera quanto più semplice e divertente possibile.
Moovie offre la possibilità di consultare al suo interno tantissime informazioni riguardanti il mondo del cinema e, attraverso delle funzionalità ben specifiche, di rendere l'utente in grado di gestire al meglio alcuni dati riguardanti lui e i film. Il sito offre quindi le seguenti funzionalità:
- gestione del proprio account;
- ricerca e consultazione delle informazioni di film, attori e utenti;
- gestione delle amicizie: richiesta, accettazione, rifiuto e cancellazione;
- gestione dei film: aggiunta, modifica, rimozione di un giudizio e aggiunta e rimozione di un promemoria.
Moovie sarà progettato in modo da essere una web application di qualità. Questa è visibile all'interno del sistema laddove ci interfacciamo con esso, in quanto Moovie dovrà: offrire un'interfaccia facile e semplice da utilizzare da parte di tutti gli utenti; garantire tempi di risposta minimi; ed offrire servizi di qualità nel trattamento dei dati.
- 2.1.1 Garanzia di orientamento: L’utente non deve sentirsi smarrito durante l’uso delle interfacce. L’utente deve sempre poter raggiungere la home e login/logout;
- 2.1.2 Sarà totalmente gratuito.
- 2.2.1 Ogni rilascio dovrà garantire l'assenza di malfunzionamenti durante il primo mese.
- 2.3.1 Tempo di risposta: il sistema garantirà un tempo di risposta medio, minore di 1s;
- 2.3.2 Scalabilità: il sistema sarà in grado di affrontare senza difficoltà fluttuazioni della quantità di utenti collegati contemporaneamente.
- 2.4.1 Facile sostenibilità: Moovie dovrà essere facilmente sostenibile sia per l'aggiunta di logica di business, sia per l'intgrazione di nuove funzionalità.
Acronimo | Descrizione |
---|---|
RAD | Requirements Analysis Document |
HTTP | HyperText Transfer Protocol |
GUI | Graphic User Interface |
DBMS | DataBase Management System |
DB | DataBase |
PDO | PHP Data Objects |
Il documento è stato diviso in quattro sezioni fondamentali, ognuna fornita di una breve descrizione. Queste sono:
- Introduzione: sezione che vuole illustrare l'ambito che ha portato alla progettazione della web application. Vengono forniti e descritti gli obiettivi proposti dal sistema, le varie funzionalità messe a disposizione dei vari utenti ed i criteri da rispettare.
- Architettura del sistema: sezione che descrive la decomposizione del sistema in sottosistemi, la mappatura hardware/software di esso, la gestione dei dati persistenti, la gestione degli accessi e le condizioni limite.
- Servizi dei sottosistemi: sezione che fornisce informazioni riguardo i servizi forniti da ogni sottosistema.
Il sistema sarà contruito seguendo il pattern architetturale MVC (Model View Controller). In questo pattern le componenti del sistema appartengono ai 3 tipi di componenti principali:
- Model: permette di accedere alle informazioni del dominio applicativo;
- Controller: riceve i comandi dell'utente e li attua modificando lo stato delle altre due componenti;
- View: si occupati di interfacciare l'utente al sistema visualizzando i dati contenuto all'interno dei model.
I sottosistemi sono stati decomposti raggruppando argomenti tra loro simili e dividendo intelligentemente porzioni inutilmente legate. Ecco Moovie divisione in sottosistemi:
- Ricerca;
- Account;
- Amicizia;
- Film;
- Gestione.
L'immagine rappresenta le varie suddivisioni effettuate e i vari collegamenti tra sottosistemi appartenenti a layer differenti.
Per procedere verso uno sviluppo più semplice del sistema, questo è stato diviso in tre strati:
- Presentation Layer: strato che si occupa delle interfacce grafiche con il quale l'utente dovra interagire;
- Application Layer: strato che si occupa di gestire tutte le richieste che l'utente effettua attraverso il Presentation_Layer, ricevendo, elaborando e alla fine mostrando il risultato di un'operazione da lui richiesta;
- Data Layer: strato che si occupa di gestire i dati del sistema.
Il sottosistema Ricerca si occupa di gestire le ricerche di tutti gli utenti offrendo diverse funzionalità quali:
- Ricerca di un film;
- Ricerca di un artista;
- Ricerca di un utente.
Il sottosistema Account si occupa di gestire tutti gli account del sistema offrendo diverse funzionalità quali:
- Creare un account;
- Autenticare un account;
- Cambiare password;
- Deautenticare un account;
- Visualizzare un profilo;
- Visualizzare la pagina iniziale.
Il sottosistema Amicizia si occupa di gestire le amicizie tra account offrendo diverse funzionalità quali:
- Inviare richiesta di amicizia;
- Cancellare richiesta di amicizia;
- Accettare richiesta di amicizia;
- Rifiutare richiesta di amicizia;
- Cancellare amicizia;
- Visualizzare gli amici.
Il sottosistema Film si occupa di gestire i giudizi di tutti gli utenti autenticati offrendo diverse funzionalità quali:
- Visualizzare un film;
- Visualizzare un artista;
- Visualizzare un genere;
- Aggiungere un giudizio;
- Modificare un giudizio;
- Rimuovere un giudizio;
- Visualizzare i giudizi;
- Aggiungere un promemoria;
- Rimuovere un promemoria;
- Visualizzare i promemoria;
- Suggerimenti automatici di film;
- Visualizzare la classifica dei film.
Il sottosistema Gestione si occupa di gestire i dati presenti nel sito offrendo diverse funzionalità quali:
- Aggiungere un film;
- Aggiungere un artista;
- Aggiungere un genere;
- Modificare un film;
- Modificare un artista;
- Modificare un genere;
- Rimuovere un film;
- Rimuovere un artista;
- Rimuovere un genere;
- Aggiornare generi di un film;
- Aggiornare artisti in un film.
Per il sistema "Moovie" si è scelto di utilizzare una struttura three-tier composta da un tier di Presentation, un tier di Business Logic e un tier di Data Resource. "Ogni tier ha dei ruoli ben precisi" e ognuno ha il proprio tipo di device su cui viene eseguito. Il tier di Presentazione, attraverso la componente di web browser permette ad un client di interfacciarsi con l'intero sistema, fornendo ad un utente la possibilità di fare richieste e renderdo i risultati di ognuna visibili all'utente. Tutte le richieste che un client esegue, attraverso i protocolli HTTP o HTTPS, arrivano sul web server (che esegue Apache e PHP), sul quale viene eseguita, tra le altre cose, la logica di business del sito e, in caso di necessità, interfacciarsi con il DBMS per utilizzare i dati persistenti.
Il sito Moovie ha al suo interno alcuni dati che devono essere mantenuti affinché il suo funzionamento sia valido. La persistenza di questi, è stata scelta di dargliela, memorizzando essi in un database relazionale nel quale i dati persistenti vengono rappresentati attraverso delle tabelle, ognuna delle quali è composta da righe (gli elementi, le istanze di ogni dato) e le colonne (attributi, descrizioni di ogni istanza di dato). I dati vengono gestiti attraverso MySQL che è un DBMS (Data Base Management System) che permette di manipolare le informazioni che si vogliono controllare sulla base di dati.
L'immagine sopra presente, descrive quello che è lo schema dei dati che dovranno essere mantenuti nel nostro database in maniera persistente.
All'interno del nostro Data Base, inoltre, sono state salvate anche tutte le immagini che il sito contiene in modo tale da avere una locazione unica dei dati e una "maiera" unica per gestire le stesse. Per evitare di avere dei rallentamenti all'interno del sistema, la tabella delle immagini è diversa rispetto a quella a cui si riferisce la stessa (Film, Film Copertina, Artista, Artista Faccia). In questo modo, se vogliamo ottenere delle informazioni riguardanti un qualcosa senza necessità di avere l'immagine, la query non sarà appesantita dalla presenza dell'immagine e quindi potrà essere restituta più velocemente.
Attributo | Tipo | Chiave |
---|---|---|
id | INT | Primaria |
nome | VARCHAR(100) |
Attributo | Tipo | Chiave |
---|---|---|
film | INT | Primaria, esterna (derivante da films.id) |
genere | INT | Primaria, esterna (derivante da generi.id) |
Attributo | Tipo | Chiave |
---|---|---|
attore | INT | Primaria, esterna (derivante da artisti.id) |
film | INT | Primaria, esterna (derivante da films.id) |
personaggio | VARCHAR(100) |
Attributo | Tipo | Chiave |
---|---|---|
id | INT | Primaria |
nome | VARCHAR(100) | |
nascita | DATE |
Attributo | Tipo | Chiave |
---|---|---|
artista | INT | Primaria, esterna (derivante da artisti.id) |
faccia | MEDIUMBLOB |
Attributo | Tipo | Chiave |
---|---|---|
artista | INT | Primaria, esterna (derivante da artisti.id) |
descrizione | TEXT |
Attributo | Tipo | Chiave |
---|---|---|
film | INT | Primaria, esterna (derivante da films.id) |
faccia | MEDIUMBLOB |
Attributo | Tipo | Chiave |
---|---|---|
film | INT | Primaria, esterna (derivante da films.id) |
descrizione | TEXT |
Attributo | Tipo | Chiave |
---|---|---|
film | INT | Primaria, esterna (derivante da films.id) |
utente | INT | Primaria, esterna (derivante da utenti.id) |
voto | INT | |
timestamp | DATETIME |
Attributo | Tipo | Chiave |
---|---|---|
film | INT | Primaria, esterna (derivante da films.id) |
utente | INT | Primaria, esterna (derivante da utenti.id) |
timestamp | DATETIME |
Attributo | Tipo | Chiave |
---|---|---|
mittente | INT | Primaria, esterna (derivante da utenti.id) |
destinatario | INT | Primaria, esterna (derivante da utenti.id) |
momento_richiesta | DATETIME |
Attributo | Tipo | Chiave |
---|---|---|
id | INT | Primaria |
nome | VARCHAR(100) | |
cognome | VARCHAR(10) | |
VARCHAR(100) | ||
password | VARCHAR(100) | |
gestore | BIT |
Attributo | Tipo | Chiave |
---|---|---|
id | int | Primaria |
titolo | VARCHAR(100) | |
durata | INT | |
anno | YEAR |
Attributo | Tipo | Chiave |
---|---|---|
film | INT | Primaria, esterna (derivante da films.id) |
regista | INT | Primaria, esterna (derivante da artisti.id) |
Moovie prevede differenti tipologie di utenza, ognuna delle quali può usufruire di varie funzionalità, a seconda del tipo di oggetto con cui interagiscono.
Per documentare i diritti di accesso per ogni attore, viene utilizzata la Matrice di Accessi sottostante.
Accessi | Utente | Utente autenticato | Utente gestore |
---|---|---|---|
Ricerca | RicercaFilm() RicercaArtista() |
RicercaFilm() RicercaArtista() RicercaUtente() |
RicercaFilm() RicercaArtista() RicercaUtente() |
Account | CreareAccount() AutenticareAccount() |
CambiarePassword() DeautenticareAccount() VisualizzareProfilo() VisualizzarePaginaIniziale() |
CambiarePassword() DeautenticareAccount() VisualizzareProfilo() VisualizzarePaginaIniziale() |
Amicizia | InviareRichiestaAmicizia() CancellareRichiestaAmicizia() AccettareRichiestaAmicizia() RifiutareRichiestaAmicizia() CancellareAmicizia() VisualizzareAmici() |
InviareRichiestaAmicizia() CancellareRichiestaAmicizia() AccettareRichiestaAmicizia() RifiutareRichiestaAmicizia() CancellareAmicizia() VisualizzareAmici() |
|
Film | VisualizzareFilm() VisualizzareArtista() VisualizzareGenere() |
VisualizzareFilm() VisualizzareArtista() VisualizzareGenere() AggiungereGiudizio() ModificareGiudizio() RimuovereGiudizio() VisualizzareGiudizi() AggiungerePromemoria() RimuoverePromemoria() VisualizzarePromemoria() SuggerimentiAutomaticiFilm() VisualizzareClassificaFilm() |
VisualizzareFilm() VisualizzareArtista() VisualizzareGenere() AggiungereGiudizio() ModificareGiudizio() RimuovereGiudizio() VisualizzareGiudizi() AggiungerePromemoria() RimuoverePromemoria() VisualizzarePromemoria() SuggerimentiAutomaticiFilm() VisualizzareClassificaFilm() |
Gestione | AggiungereFilm() AggiungereArtista() AggiungereGenere() ModificareFilm() ModificareArtista() ModificareGenere() RimuovereFilm() RimuovereArtista() RimuovereGenere() AggiornareGeneriFilm() AggiornareArtistiFilm() |
Questa matrice ha solo uno scopo esplicativo verso il lettore di questo documento. I controlli NON verranno realizzati direttamente tramite un'implementazione della suddetta matrice. Tutti i controlli che quest'ultima impone verranno realizzati diversamente.
Allo start-up del sistema è necessario l'avvio di un web server Apache, il quale, attraverso MySQL acquisirà le informazioni necessarie all'interno del database per permettere all'utente la viusualizzazione della HomePage. Ritrovandosi su questa, l'utente avrà la possibilità di usufrurire di tutte le funzionalità che Moovie offre.
In fase di terminazione del sistema sarà garantita una corretta persistenza dei dati annullando le eventuali operazioni in esecuzione. Inoltre ogni sottosistema cesserà di operare correttamente.
In caso di errore o fallimento del sistema o dei suoi sottosistemi, Moovie garantirà di tornare ad una condizione precedente di funzionamento ottimale.
Il sito Moovie per semplicità è stato decomposto in sottosistemi e per ognuno di questi sono previste delle operazioni che sono i servizi che la web application offre.
Sottosistema | Descrizione |
---|---|
Ricerca | Il sottosistema ricerca si occupa di fornire tutti i servizi che offrono la possibilità di effettuare delle ricerche e ricevere delle informazioni sul sito |
Servizi | Descrizione |
---|---|
RicercaFilm() | Servizio che offre la possibilità di ricercare un film all'interno di Moovie |
RicercaArtista() | Servizio che offre la possibilità di ricercare un artista all'interno di Moovie |
RicercaUtente() | Servizio che offre la possibilità di ricercare un utente all'interno di Moovie |
Sottosistema | Descrizione |
---|---|
Account | Il sottosistema account si occupa di fornire tutti i servizi che permettono ad un utente di gestire il proprio account |
Servizi | Descrizione |
---|---|
CreareAccount() | Servizio che offre la possibilità di creare un account ad un utente che non ne posside uno |
AutenticareAccount() | Servizio che permette ad un utente di autenticarsi all'interno del sito |
CambiarePassword() | Servizio che permette ad un utente di effettuare il cambio password |
DeautenticareAccount() | Servizio che permette ad un utente di deautenticarsi dal sito |
VisualizzareProfilo() | Servizio che permette ad un utente di visualizzare un profilo all'interno del sito |
VisualizzarePaginaIniziale() | Servizio che permette ad un utente di visualizzare la pagina iniziale del sito |
Sottosistema | Descrizione |
---|---|
Amicizia | Il sottosistema amicizia si occupa di fornire tuttti i servizi che permettono ad un utente di gestire le proprie amicizie presenti su Moovie |
Servizi | Descrizione |
---|---|
InviareRichiestaAmicizia() | Servizio che offre la possibilità di richiedere, ad un altro utente registrato sul sito, la sua amicizia |
CancellareRichiestaAmicizia() | Servizio che offre la possibilità di cancellare la richiesta di amicizia ad un altro utente registrato sul sito |
AccettareRichiestaAmicizia() | Servizio che offre la possibilità di confermare una amicizia ricevuta da parte di un altro utente |
RifiutareRichiestaAmicizia() | Servizio che permette ad un utente di rifiutare una richiesta di amicizia ricevuta da parte di un altro utente |
CancellareAmicizia() | Servizio che permette ad un utente di cancellare l'amicizia con un altro utente |
VisualizzaAmici() | Servizio che permette ad un utente di visualizzare tutte le amicizie |
Sottosistema | Descrizione |
---|---|
Film | Il sottosistema film si occupa di fornire tutti i servizi che permettono ad un utente di gestire i giudizi riguardanti i film e di farsi suggerire dei film dal sistema |
Servizi | Descrizione |
---|---|
VisualizzareFilm() | Servizio che offre la possibilità di visualizzare la pagina di un film |
VisualizzareArtista() | Servizio che offre la possibilità di visualizzare la pagina di un artista |
VisualizzareGenere() | Servizio che offre la possibilità di visualizzare la pagina di un genere |
AggiungereGiudizio() | Servizio che offre la possibilità di aggiungere un giudizio su un film |
ModificareGiudizio() | Servizio che offre la possibilità modificare un giudizio, fatto in precedenza, su un film visto |
RimuovereGiudizio() | Servizio che offre la possibilità di rimuovere un giudizio su un film |
VisualizzareGiudizio() | Servizio che offre la possibilità di visualizzare tutti i propri giudizi |
AggiungerePromemoria() | Servizio che offre la possibilità di aggiungere un determinato film tra i promemoria |
RimuoverePromemoria() | Servizio che offre la possibilità di rimuovere un promemoria |
VisualizzarePromemoria() | Servizio che offre la possibilità di visualizzare tutti i propri promemoria |
SuggerimentiAutomaticiFilm() | Servizio che offre la possibilità di farsi suggerire dal sistema dei film in linea con le proprie preferenze |
VisualizzareClassificaFilm() | Servizio che offre la possibilità di visualizzare i film nella classifica |
Sottosistema | Descrizione |
---|---|
Gestione | Il sottosistema gestione si occupa di fornire tutti i servizi che permettono ad un utente gestore di gestire i dati presenti nel sito |
Servizi | Descrizione |
---|---|
AggiungiFilm() | Servizio che offre la possibilità di aggiungere un film all'interno del sistema |
AggiungiArtista() | Servizio che offre la possibilità di aggiungere un artista all'interno del sistema |
AggiungiGenere() | Servizio che offre la possibilità di aggiungere un genere all'interno del sistema |
ModificaFilm() | Servizio che offre la possibilità di modificare un film all'interno del sistema |
ModificaArtista() | Servizio che offre la possibilità di modificare un artista all'interno del sistema |
ModificaGenere() | Servizio che offre la possibilità di modificare un genere all'interno del sistema |
RimuoviFilm() | Servizio che offre la possibilità di rimuovere un film all'interno del sistema |
RimuoviArtista() | Servizio che offre la possibilità di rimuovere un artista all'interno del sistema |
RimuoviGenere() | Servizio che offre la possibilità di rimuovere un genere all'interno del sistema |
AggiornareGeneriFilm() | Servizio che offre la possibilità di aggiornare generi di un film all'interno del sistema |
AggiornareArtistiFilm() | Servizio che offre la possibilità di aggiornare gli artisti in un film all'interno del sistema |